#include <iostream>
#include <pthread.h>
#include <unistd.h>
#include <string>
#include <thread>

using namespace std;

std::string toHex(pthread_t tid)
{
    char hex[64];
    snprintf(hex,sizeof(hex),"%p",tid);
    return hex;
}
void *threadRoutine(void *args)
{
    while(1)
    {
        cout << "thread id: " << toHex(pthread_self()) << endl;
    }
}
int main()
{
    pthread_t tid;
    pthread_create(&tid,nullptr,threadRoutine,nullptr);

    pthread_join(tid,nullptr);
    return 0;
}


// void threadrun()
// {
//     while(1)
//     {
//         cout << "new thread" << endl;
//         sleep(1);
//     }
// }
// int main()
// {
//     //C++11中的多线程
//     thread t1(threadrun);
//     t1.join();
// }


// void *treadRoutine(void *args)
// {
//     while(1)
//     {
//         cout << "new thread,pid is: " << getpid() << endl;
//         sleep(2);
//     }
//     return nullptr;
// }
// void *threadRoutine(void *args)
// {
//     int cnt  = 5;
//     while(1)
//     {
//         cout << "new thread,pidis: " <<getpid() << endl;
//         sleep(1);
//         cnt--;
//         if(cnt == 0) break;
//     }
//     pthread_exit((void *)100);
//     //return (void *)1;
// }
// int main()
// {
//     pthread_t tid;
//     pthread_create(&tid,nullptr,threadRoutine,nullptr);

//     // while(1)
//     // {
//     //     cout << "main thread,pid is: " << getpid() << endl;
//     //     sleep(1);
//     // }

//     void *retval;
//     pthread_join(tid,&retval);
//     cout << "main thread quit" << (long long)retval << endl;
//     return 0;
// } 


// class Request
// {
// public:
//     Request(int start,int end, const string &threadName)
//         :_start(start)
//         ,_end(end)
//         ,_threadName(_threadName)
//         {

//         }
// public:
//     int _start;
//     int _end;
//     string _threadName;
// };

// class Response
// {
// public:
//     Response(int result, int exitcode)
//         :_result(result)
//         ,_exitcode(exitcode)
//         {}
// public:
//     int _result;//计算结果
//     int _exitcode;//结果是否可靠
// };

// class Request
// {
// public:
//     Request(int start, int end, const string &threadName)
//         :_start(start)
//         ,_end(end)
//         ,_threadName(threadName)
//         {}

//     int sumCount(int start,int end)
//     {
//         int count = 0;
//         for(int i = start; i <= end; i++)
//         {
//             count += i;
//         }
//         return count;
//     }
// public:
//     int _start;
//     int _end;
//     string _threadName;
// };

// class Response
// {
// public:
//     Response(int result,int exitcode)
//         :_result(result)
//         ,_exitcode(exitcode)
//         {}
// public:
//     int _result;
//     int _exitcode;
// };
// // void *sumCount(void *args)
// // {
// //     Request *rq = static_cast<Request*>(args);
// //     Response *rsp = new Response(0,0);
// //     for(int i = rq->_start; i <= rq->_end; i++)
// //     {
// //         rsp->_result += i;
// //     }
// //     delete rq;
// //     return rsp;
// // }

// void *sumCount(void *args)
// {
//     Request *rq = static_cast<Request*>(args);
//     Response *rsp = new Response(0,0);//default 0

//     // for(int i = rq->_start; i <= rq->_end; i++)
//     // {
//     //     rsp->_result += i;
//     // }
//     // return rsp;

//     rsp->_result = rq->sumCount(rq->_start,rq->_end);
//     return rsp;
// }
// int main()
// {
//     // pthread_t tid;
//     // Request *rq = new Request(1,100,"thread 1");
//     // pthread_create(&tid,nullptr,sumCount,rq);

//     // void *ret;
//     // pthread_join(tid,&ret);
//     // Response* rsp = static_cast<Response*>(ret);
//     // cout << "rsp->result" << rsp->_result << ", exitcode: " << rsp->_exitcode <<endl;
//     // delete rsp;
//     // return 0;
    

//     pthread_t tid;
//     Request *rq = new Request(1,100,"thread_1");
//     pthread_create(&tid,nullptr,sumCount,rq);


//     void* ret;
//     pthread_join(tid,&ret);
//     Response *rsp = static_cast<Response*>(ret);
//     cout << "result: " << rsp->_result << "exitcode: " << rsp->_exitcode << endl;
// }